package model

import (
	"ginblog/utils/errmsg"
)

type Profile struct {
	ID        int    `gorm:"primaryKey" json:"id"`
	Name      string `gorm:"type:varchar(20)" json:"name"`
	Desc      string `gorm:"type:varchar(200)" json:"desc"`
	Qqchat    string `gorm:"type:varchar(200)" json:"qq_chat"`
	Wechat    string `gorm:"type:varchar(100)" json:"wechat"`
	Weibo     string `gorm:"type:varchar(200)" json:"weibo"`
	Bili      string `gorm:"type:varchar(200)" json:"bili"`
	Email     string `gorm:"type:varchar(200)" json:"email"`
	Img       string `gorm:"type:varchar(200)" json:"img"`
	Avatar    string `gorm:"type:varchar(200)" json:"avatar"`
	IcpRecord string `gorm:"type:varchar(200)" json:"icp_record"`
}

// GetProfile 获取个人信息设置
// GetProfile 根据用户ID获取用户档案信息。
// 参数:
//
//	id - 用户的唯一标识符。
//
// 返回值:
//
//	Profile - 用户的档案信息。
//	int - 错误代码，表示执行结果的状态。
func GetProfile(id int) (Profile, int) {
	var profile Profile
	// 使用用户ID查询数据库中的用户档案信息。
	err = db.Where("ID = ?", id).First(&profile).Error
	// 如果查询过程中出现错误，返回空的用户档案信息和错误代码。
	if err != nil {
		return profile, errmsg.ERROR
	}
	// 如果查询成功，返回用户档案信息和成功代码。
	return profile, errmsg.SUCCESS
}

// UpdateProfile 更新个人信息设置
// UpdateProfile 根据用户ID更新用户资料
// 参数:
//
//	id - 用户ID
//	data - 指向包含要更新资料信息的Profile结构体指针
//
// 返回值:
//
//	更新操作的状态码，成功返回errmsg.SUCCESS，失败返回errmsg.ERROR
func UpdateProfile(id int, data *Profile) int {
	// 初始化一个Profile类型的变量profile，用于存储从数据库中查询到的资料信息
	var profile Profile

	// 使用db对象的Model方法开始一个数据库操作，指定操作的模型为Profile
	// Where方法添加查询条件，指定更新操作只影响ID等于$id$的记录
	// Updates方法执行更新操作，参数为要更新的数据，即传入的$data$指针
	// Error方法用于捕获执行过程中的错误，如果执行成功，err将为nil
	err = db.Model(&profile).Where("ID = ?", id).Updates(&data).Error

	// 检查是否有错误发生，如果err不为nil，表示更新操作失败
	if err != nil {
		// 返回错误状态码，表示更新操作失败
		return errmsg.ERROR
	}

	// 如果没有错误，返回成功状态码，表示更新操作成功
	return errmsg.SUCCESS
}
